package com.asteria.utility; import java.io.FileReader; import java.nio.file.Paths; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; /** * The utility class that provides functions for parsing {@code .json} files. * * @author lare96 <http://github.com/lare96> */ public abstract class JsonLoader implements Runnable { /** * The path to the {@code .json} file being parsed. */ private final String path; /** * Creates a new {@link JsonLoader}. * * @param path * the path to the {@code .json} file being parsed. */ public JsonLoader(String path) { this.path = path; } @Override public void run() { load(); } /** * A dynamic method that allows the user to read and modify the parsed data. * * @param reader * the reader for retrieving the parsed data. * @param builder * the builder for retrieving the parsed data. */ public abstract void load(JsonObject reader, Gson builder); /** * Loads the parsed data. How the data is loaded is defined by * {@link JsonLoader#load(JsonObject, Gson)}. * * @return the loader instance, for chaining. */ public final JsonLoader load() { try (FileReader in = new FileReader(Paths.get(path).toFile())) { JsonParser parser = new JsonParser(); JsonArray array = (JsonArray) parser.parse(in); Gson builder = new GsonBuilder().create(); for (int i = 0; i < array.size(); i++) { JsonObject reader = (JsonObject) array.get(i); load(reader, builder); } } catch (Exception e) { e.printStackTrace(); } return this; } }